#!/usr/bin/env dart

/// 颜色检查工具
/// 用于检查AppColor中的颜色重复和规范性问题
/// 
/// 使用方法：
/// dart .cursor/scripts/check_colors.dart

import 'dart:io';

void main() {
  print('🔍 开始检查AppColor中的颜色...\n');
  
  final appColorFile = File('lib/config/app_color.dart');
  if (!appColorFile.existsSync()) {
    print('❌ 错误：找不到 lib/config/app_color.dart 文件');
    exit(1);
  }
  
  final content = appColorFile.readAsStringSync();
  final lines = content.split('\n');
  
  // 提取颜色定义
  final colorDefinitions = <String, List<String>>{};
  final colorValues = <String, List<String>>{};
  final issues = <String>[];
  
  for (int i = 0; i < lines.length; i++) {
    final line = lines[i].trim();
    
    // 匹配颜色定义行
    final colorMatch = RegExp(r'static const Color (\w+) = Color\(0x([0-9A-Fa-f]{8})\);').firstMatch(line);
    if (colorMatch != null) {
      final name = colorMatch.group(1)!;
      final value = colorMatch.group(2)!;
      
      // 检查是否包含透明度
      if (value.length == 8 && value.substring(0, 2) != 'FF') {
        issues.add('⚠️  第${i + 1}行：$name 包含透明度 (0x$value)，建议改为纯色');
      }
      
      // 记录颜色定义
      colorDefinitions[name] = [value, '第${i + 1}行'];
      
      // 记录颜色值
      final pureValue = value.substring(2); // 去掉透明度部分
      if (!colorValues.containsKey(pureValue)) {
        colorValues[pureValue] = [];
      }
      colorValues[pureValue]!.add('$name (第${i + 1}行)');
    }
  }
  
  // 检查重复颜色值
  print('📊 颜色统计：');
  print('   总颜色数量：${colorDefinitions.length}');
  print('   唯一颜色值：${colorValues.length}\n');
  
  // 检查重复
  print('🔍 重复颜色检查：');
  bool hasDuplicates = false;
  colorValues.forEach((value, names) {
    if (names.length > 1) {
      hasDuplicates = true;
      print('   ❌ 颜色值 0xFF$value 重复定义：');
      for (final name in names) {
        print('      - $name');
      }
      print('');
    }
  });
  
  if (!hasDuplicates) {
    print('   ✅ 未发现重复颜色值\n');
  }
  
  // 检查命名规范
  print('📝 命名规范检查：');
  bool hasNamingIssues = false;
  colorDefinitions.forEach((name, data) {
    if (name.startsWith('color') && RegExp(r'^[0-9A-Fa-f]+$').hasMatch(name.substring(5))) {
      hasNamingIssues = true;
      print('   ⚠️  $name 使用了十六进制命名，建议改为描述性命名');
    }
  });
  
  if (!hasNamingIssues) {
    print('   ✅ 命名规范良好\n');
  }
  
  // 显示问题
  if (issues.isNotEmpty) {
    print('⚠️  发现的问题：');
    for (final issue in issues) {
      print('   $issue');
    }
    print('');
  }
  
  // 显示建议
  print('💡 建议：');
  print('   1. AppColor中应定义纯色（无透明度）');
  print('   2. 透明度通过 withOpacity() 方法设置');
  print('   3. 使用描述性命名而非十六进制值');
  print('   4. 定期检查并合并重复颜色');
  print('   5. 按功能模块组织颜色定义\n');
  
  // 生成颜色使用示例
  print('📋 正确的颜色使用示例：');
  print('   // ✅ 正确');
  print('   Container(');
  print('     color: AppColor.primary.withOpacity(0.3),');
  print('     child: Text(');
  print('       "Hello",');
  print('       style: TextStyle(color: AppColor.textPrimary),');
  print('     ),');
  print('   )');
  print('');
  print('   // ❌ 错误');
  print('   Container(');
  print('     color: const Color(0xFF00BBFF),  // 硬编码');
  print('     child: Text(');
  print('       "Hello",');
  print('       style: TextStyle(color: Colors.white),  // 系统颜色');
  print('     ),');
  print('   )');
  
  print('\n✅ 颜色检查完成！');
}
